package com.goudan.practice.array;

/**
 * 问题：评测题目: 合并两个有序整型数据（入参两个需要合并的数组，返回值合并好的新数组）
 */
public class MergeArray {
    public static void main(String[] args) {
        int[] a = {1, 3, 5, 7, 9};
        int[] b = {2, 4, 6, 8, 10, 13, 14, 16};
        int[] c = margeArr(a, b);
        for (int i : c) {
            System.out.println(i);
        }

    }

    private static int[] margeArr(int[] a, int[] b) {
        int[] c = new int[a.length + b.length];
        int i = 0, j = 0;
        int index = 0;
        //比较指针i,j指向的值，小的值存入指针index指向的结果数组中，当有一个指针（i或j）先到达数组末尾时，比较结束；
        while (i < a.length && j < b.length) {
            if (a[i] < b[j]) {
                c[index++] = a[i++];
            } else {
                c[index++] = b[j++];
            }
        }
        int l;
        //将指针（i或j）没有到达数组末尾的数组复制到指针index指向的结果数组中
        if (i < a.length) {
            for (l = i; l < a.length; l++) {
                c[index++] = a[l];
            }
        }
        //将指针（i或j）没有到达数组末尾的数组复制到指针index指向的结果数组中
        if (j < b.length) {
            for (l = j; l < b.length; l++) {
                c[index++] = b[l];
            }
        }
        return c;
    }
}
